/* myftpspec.x
   fichier de spécification de l'interface de myftp (RPC)
*/

/* Notes :
Les opération GET, PUT transferont une quantité indéterminée de données
Nous ne pouvons donc pas les implémenter dans un simple appel mais en 4
opérations séparées (comme c'était le cas d'un fichier local)
- int OPEN(string filename, bool rw) retournera le fd du fichier ouvert
- int READ(int fd, string buf, int len) retourne le nombre de bytes lus
- int WRITE(int fd, string buf, int len) retourne le nombre de bytes écrits
- int CLOSE(int fd) ferme le fichier distant
Il faut alors définir les structures de données pour les arguments
*/

const BUFF_SIZE = 4096;	/* longueur buffer = 4KO */
const FN_SIZE = 256;	/* longueur filename max = 256 */

struct open_file {
	string	filename<FN_SIZE>;
	bool	rw;	/* r=FALSE(0), w=TRUE(1) */
};
struct data_o {			/* structure de données pour WRITE */
	int	fd;
	string	buf<BUFF_SIZE>;
	int	len;
};

struct data_i {                 /* structure de données pour READ */
        string  buf<BUFF_SIZE>;
        int     len;
};

struct user_parameter {
	int uid;
	int gid;
};
program PROG {
	version VERS {
		string PWD(void) = 1;	/* proc #1 */
		bool CD(string) = 2;	/* proc #2 */
		string LS(void) = 3;	/* proc #3 */
/*		file GET(string) = 4;	/* proc #4 */
/*		int PUT(string) = 5;	/* proc #5 */
		int OPEN(open_file) = 4;
		data_i READ(int) = 5;
		int WRITE(data_o) = 6;
		int CLOSE(int) = 7;
		int BYE(void) = 8;	/* proc #8 */
		user_parameter GET_PARAM(string) = 9; /* proc #9*/
		int CHECK(void) = 10; /* verifi si l'utilisateur a le droit d'ecriture dans un repertoire*/
	} = 1;				/* vers #1 */
} = 0x12345678;				/* prog num*/
